#include <iostream>
#include <mprpcapplication.h>
#include <friend.pb.h>

int main(int argc, char* argv[]) {
    // 想用mprpc服务需要先调用框架的初始化函数
    MprpcApplication::Init(argc, argv);

    // 调用远程rpc节点发布的GetFriendsList
    fixbug::FriendServiceRpc_Stub stub(new MprpcChannel());
    // rpc方法请求
    fixbug::GetFriendsListRequest request;
    request.set_userid(1000);
    // rpc方法响应结果
    fixbug::GetFriendsListResponse response;
    // rpc调用状态
    MprpcController controller;
    // rpc调用具体方法，同步
    stub.GetFriendsList(&controller, &request, &response, nullptr);   // RpcChannel->CallMethod()     基类通过多态来做rpc请求调用（序列化和网络发送）

    if(controller.Failed()) {
        std::cout << controller.ErrorText() << std::endl;
    }
    else {
        // 一次rpc调用完成，解析response
        if (0 == response.result().errcode()) {
            std::cout << "rpc GetFriendsList response success!" << std::endl;
            int size = response.friends_size();
            for(int i = 0; i < size; ++i) {
                std::cout << "index:" << i + 1 << " name:" << response.friends(i) << std::endl; 
            }
        }
        else {
            std::cout << "rpc GetFriendsList response error:" << response.result().errmsg() << std::endl;
        }
    }
    
    return 0;
}